listitemwidget: Add api to reorder children
authorMatthias Clasen <mclasen@redhat.com>
Fri, 5 Jun 2020 16:39:00 +0000 (12:39 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 5 Jun 2020 17:28:44 +0000 (13:28 -0400)
We need this to keep the rows in sync with the columns
when they are reordered.

gtk/gtklistitemwidget.c
gtk/gtklistitemwidgetprivate.h

index 2d71720c28007e94e9d87c43db86b50e74201cf9..f700269823ba12b5708adaa4485274434c33aa6e 100644 (file)
@@ -609,6 +609,37 @@ gtk_list_item_widget_add_child (GtkListItemWidget *self,
   gtk_widget_set_parent (child, GTK_WIDGET (self));
 }
 
+void
+gtk_list_item_widget_reorder_child (GtkListItemWidget *self,
+                                    GtkWidget         *child,
+                                    guint              position)
+{
+  GtkWidget *widget = GTK_WIDGET (self);
+  GtkWidget *sibling = NULL;
+
+  if (position > 0)
+    {
+      GtkWidget *c;
+      guint i;
+
+      for (c = gtk_widget_get_first_child (widget), i = 0;
+           c;
+           c = gtk_widget_get_next_sibling (c), i++)
+        {
+          if (i + 1 == position)
+            {
+              sibling = c;
+              break;
+            }
+        }
+    }
+
+  gtk_widget_insert_after (child, widget, sibling);
+  gtk_css_node_insert_after (gtk_widget_get_css_node (widget),
+                             gtk_widget_get_css_node (child),
+                             sibling ? gtk_widget_get_css_node (sibling) : NULL);
+}
+
 void
 gtk_list_item_widget_remove_child (GtkListItemWidget *self,
                                    GtkWidget         *child)
index f3c7fdbdc9bd201fd0740d1bca04d44a57746066..3042d087897cde6d28a115294b00542e9dcb5d8d 100644 (file)
@@ -75,6 +75,9 @@ void                    gtk_list_item_widget_set_single_click_activate
                                                                  gboolean               single_click_activate);
 void                    gtk_list_item_widget_add_child          (GtkListItemWidget      *self,
                                                                  GtkWidget              *child);
+void                    gtk_list_item_widget_reorder_child      (GtkListItemWidget      *self,
+                                                                 GtkWidget              *child,
+                                                                 guint                   position);
 void                    gtk_list_item_widget_remove_child       (GtkListItemWidget      *self,
                                                                  GtkWidget              *child);